package com.question.business.menu.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.question.business.menu.entity.Menu;
import com.question.business.menu.model.ao.*;
import com.question.business.menu.model.vo.*;

import java.util.List;

/**
 * 菜单服务
 *
 * @author star
 * @since 2023-09-11
 */
public interface IMenuService extends IService<Menu> {

    /**
     * 菜单查询
     *
     * @param ao 请求参数
     * @return List<MenuVO> 响应参数
     */
    List<MenuVO> queryMenuList(MenuAO ao);

    /**
     * 菜单明细查询
     *
     * @param id 菜单ID
     * @return MenuDetailVO 响应参数
     */
    MenuDetailVO queryMenuDetail(String id);

    /**
     * 菜单新增数据
     *
     * @param ao 请求参数
     * @return MenuAddVO 响应参数
     */
    MenuAddVO addMenu(MenuAddAO ao);

    /**
     * 菜单修改数据
     *
     * @param ao 数据
     */
    void updateMenu(MenuUpdateAO ao);

    /**
     * 菜单删除数据
     *
     * @param id 菜单ID
     */
    void deleteMenu(String id);

    /**
     * 菜单批量删除数据
     *
     * @param ids 请求参数
     */
    void deleteBatchMenu(List<String> ids);

    /**
     * 菜单启用、停用
     *
     * @param ao 数据
     */
    void enableMenu(MenuEnabledAO ao);

    /**
     * 菜单下拉列表查询
     *
     * @param ao 请求参数
     * @return List<MenuDropDownVO> 响应参数
     */
    List<MenuDropDownVO> queryMenuDropDown(MenuDropDownAO ao);

    /**
     * 根据角色ID获取菜单代码
     *
     * @param roles 角色
     * @return List<String>
     */
    List<String> queryMenuCodesByRoleId(List<String> roles);

    /**
     * 菜单栏查询
     *
     * @return List<MenuRouteVO> 响应参数
     */
    List<MenuRouteVO> queryMenuRoute();

    /**
     * 菜单最新排序
     *
     * @param parentId 请求参数
     * @return Integer 响应参数
     */
    Integer createMenuOrder(String parentId);
}